#pragma once

#include "Reactor.h"
#include "../../utility/threadpool/task/Task.h"

namespace network {

    class ReactorTask : public threadpool::Task {

    public:

        /**
          * @brief  构造一个反应堆任务类型
          * @param  func    任务函数
          * @param  fd      套接字
          * @param  reactor 反应堆指针
          */
        ReactorTask(std::function<void()> func, Event *event, Reactor *reactor) :
                threadpool::Task(0, std::move(func)), event_(event), reactor_(reactor) {}

        std::string getType() const override { return "ReactorTask"; }

        /**
          * @brief  获取事件对象的指针
          * @retval 事件对象的指针
          */
        Event *getEvent() const { return event_; }

        /**
          * @brief  获取反应堆指针
          * @retval 反应堆指针
          */
        Reactor *getReactor() { return reactor_; }

    private:

        // 事件对象的指针
        Event *event_;

        // 反应堆指针
        Reactor *reactor_;

    };

}